﻿using System;
using Csla;
using log4net;
using System.ComponentModel.DataAnnotations;
using Csla.Data;

namespace Sireass.Bl
{
    [Serializable]
    public class ProyectoInfo : ReadOnlyBase<ProyectoInfo>
    {
        // Create a logger for use in this class
        private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        #region Propiedades
        public static readonly PropertyInfo<long> IdProyectoProperty = RegisterProperty<long>(c => c.IdProyecto);
        [Display(Name = "Id del proyeto")]
        public long IdProyecto
        {
            get { return GetProperty(IdProyectoProperty); }
            private set { LoadProperty(IdProyectoProperty, value); }
        }

		public static readonly PropertyInfo<long> IdProgramaProperty = RegisterProperty<long>(c => c.IdPrograma);
		[Display(Name = "Id Programa")]
		public long IdPrograma
		{
			get { return GetProperty(IdProgramaProperty); }
			set { LoadProperty(IdProgramaProperty, value); }
		}

		public static readonly PropertyInfo<string> ProgramaProperty = RegisterProperty<string>(c => c.Programa);
		[Display(Name = "Descripción Programa")]
		public string Programa
		{
			get { return GetProperty(ProgramaProperty); }
			set { LoadProperty(ProgramaProperty, value); }
		}

        public static readonly PropertyInfo<long> IdUnidadResponsableProperty = RegisterProperty<long>(c => c.IdUnidadResponsable);
        [Display(Name = "Id Unidad Responsable")]
        public long IdUnidadResponsable
        {
            get { return GetProperty(IdUnidadResponsableProperty); }
            set { LoadProperty(IdUnidadResponsableProperty, value); }
        }

        public static readonly PropertyInfo<string> UnidadResponsableProperty = RegisterProperty<string>(c => c.UnidadResponsable);
        [Display(Name = "Descripción Unidad Responsable")]
        public string UnidadResponsable
        {
            get { return GetProperty(UnidadResponsableProperty); }
            set { LoadProperty(UnidadResponsableProperty, value); }
        }

        public static readonly PropertyInfo<long> IdResponsableProperty = RegisterProperty<long>(c => c.IdResponsable);
        [Display(Name = "Id Responsable")]
        public long IdResponsable
        {
            get { return GetProperty(IdResponsableProperty); }
            set { LoadProperty(IdResponsableProperty, value); }
        }

        public static readonly PropertyInfo<string> ResponsableProperty = RegisterProperty<string>(c => c.Responsable);
        [Display(Name = "Descripción Responsable")]
        public string Responsable
        {
            get { return GetProperty(ResponsableProperty); }
            set { LoadProperty(ResponsableProperty, value); }
        }

        public static readonly PropertyInfo<string> ProyectoProperty = RegisterProperty<string>(c => c.Proyecto);
        [Display(Name = "Proyecto")]
        public string Proyecto
        {
            get { return GetProperty(ProyectoProperty); }
            set { LoadProperty(ProyectoProperty, value); }
        }

        public static readonly PropertyInfo<string> ClaveProyectoProperty = RegisterProperty<string>(c => c.ClaveProyecto);
        [Display(Name = "Clave del Proyecto")]
        public string ClaveProyecto
        {
            get { return GetProperty(ClaveProyectoProperty); }
            set { LoadProperty(ClaveProyectoProperty, value); }
        }

        public static readonly PropertyInfo<string> ObjetivoProyectoProperty = RegisterProperty<string>(c => c.Objetivo);
        [Display(Name = "Objetivo del Proyecto")]
        public string Objetivo
        {
            get { return GetProperty(ObjetivoProyectoProperty); }
            set { LoadProperty(ObjetivoProyectoProperty, value); }
        }

        public static readonly PropertyInfo<string> MetaProperty = RegisterProperty<string>(c => c.Meta);
        [Display(Name = "Meta")]
        public string Meta
        {
            get { return GetProperty(MetaProperty); }
            set { LoadProperty(MetaProperty, value); }
        }

        public static readonly PropertyInfo<DateTime> FechaInicioVigenciaProperty = RegisterProperty<DateTime>(c => c.FechaInicioVigencia);
        [Display(Name = "Fecha Inicio Vigencia")]
        public DateTime FechaInicioVigencia
        {
            get { return GetProperty(FechaInicioVigenciaProperty); }
            set { LoadProperty(FechaInicioVigenciaProperty, value); }
        }

        public static readonly PropertyInfo<DateTime> FechaFinVigenciaProperty = RegisterProperty<DateTime>(c => c.FechaFinVigencia);
        [Display(Name = "Fecha Fin Vigencia")]
        public DateTime FechaFinVigencia
        {
            get { return GetProperty(FechaFinVigenciaProperty); }
            set { LoadProperty(FechaFinVigenciaProperty, value); }
        }

        public static readonly PropertyInfo<bool> HabilitadoProperty = RegisterProperty<bool>(c => c.Habilitado);
        [Display(Name = "Habilitado")]
        public bool Habilitado
        {
            get { return GetProperty(HabilitadoProperty); }
            set { LoadProperty(HabilitadoProperty, value); }
        }

        public static readonly PropertyInfo<DateTime> FechaAltaProperty = RegisterProperty<DateTime>(c => c.FechaAlta);
        [Display(Name = "Fecha Alta")]
        public DateTime FechaAlta
        {
            get { return GetProperty(FechaAltaProperty); }
            set { LoadProperty(FechaAltaProperty, value); }
        }

        public static readonly PropertyInfo<DateTime> FechaBajaProperty = RegisterProperty<DateTime>(c => c.FechaBaja);
        [Display(Name = "Fecha Baja")]
        public DateTime FechaBaja
        {
            get { return GetProperty(FechaBajaProperty); }
            set { LoadProperty(FechaBajaProperty, value); }
        }

        #endregion

        #region DataPortal

        private void Child_Fetch(System.Data.IDataReader data)
        {
            var safeData = new SafeDataReader(data);
            IdProyecto = safeData.GetInt64("nId_Proyecto");
			IdPrograma = safeData.GetInt64("nId_Programa");
			Programa = safeData.GetString("cPrograma");
            IdUnidadResponsable = safeData.GetInt64("nId_UnidadResponsable");
            UnidadResponsable = safeData.GetString("cUnidadResponsable");
            IdResponsable = safeData.GetInt64("nId_Persona_Responsable");
            Responsable = safeData.GetString("cResponsable");
            Proyecto = safeData.GetString("cProyecto");
            ClaveProyecto = safeData.GetString("cClave_Proyecto");
            Objetivo = safeData.GetString("cObjetivo");
            Meta = safeData.GetString("cMeta");
            FechaInicioVigencia = safeData.GetDateTime("dFecha_Inicio_Vigencia");
            FechaFinVigencia = safeData.GetDateTime("dFecha_Fin_Vigencia");
            Habilitado = safeData.GetBoolean("bHabilitado");
            FechaAlta = safeData.GetDateTime("dFecha_Alta");
            FechaBaja = safeData.GetDateTime("dFecha_Baja");
        }

        #endregion
    }
}
